package Day13;

/**
 * ---------------------------------------------------------------
 * 题目：
 *      字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。
 *      给定两个字符串，编写一个函数判定它们是否只需要一次(或者零次)编辑。
 * ---------------------------------------------------------------
 * 示例:
 *      输入:
 *          first = "pale"
 *          second = "ple"
 *      输出: True
 * --------------------------------------------------------------
 * 方法：
 *      前后指针法
 *      前后指针依次像中间查找，如果最后j-i<=0那就说明可以通过一次编辑
 * --------------------------------------------------------------
 */
class Solution {
    public static void main(String[] args) {
        String first = "pale";
        String second = "ple";
        System.out.println(oneEditAway(first,second));
    }
    public static boolean oneEditAway(String first, String second) {
        int p1 = 0;
        int q1 = first.length() - 1;
        int p2 = 0;
        int q2 = second.length() - 1;
        while (p1 <= q1 && p2 <= q2) {
            if (first.charAt(p1) == second.charAt(p2)) {
                ++p1;
                ++p2;
                continue;
            }
            if (first.charAt(q1) == second.charAt(q2)) {
                --q1;
                --q2;
            } else {
                break;
            }
        }
        return q1 - p1 + q2 - p2 <= 0 && Math.abs(p1 - p2) <= 1 && Math.abs(q1 - q2) <= 1;
    }
}